
package gruppe1projekt.TUILayer;
import java.util.Scanner;
import gruppe1projekt.ControllerLayer.*;
import gruppe1projekt.ModelLayer.RentableItem;

public class RentTUI extends BaseUI
{
    private RentController rentCtr;

    //Constructor which does nothing
    public RentTUI()
    {
    }

    // Method to start the menu
    public void start()
    {
        adressMenu();
    }

    // The menu
    public void adressMenu()
    {
        boolean exit = false;
        while(!exit)
        {
            int choice = writeRentMenu();
            if(choice == 1)
            {
                // Create RentableItem
                createRentableItem();
            }
            else
            {
               if(choice == 2)
               {
                   //Read RentableItem
                   readRentableItem();
               }
            else
            {
                if(choice == 3)
                {
                    // Update RentableItem
                    updateRentableItem();
                }
            else
            {
                if(choice == 4)
                {
                    //Delete RentableItem
                    deleteRentableItem();
                }
            else
            {
               if(choice == 5)
               {
                   exit = true;
               }
            }
            }
            }
            }
        }
    }

    // The Rent menu layout
    public int writeRentMenu()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\f *** Udlejnings Menu ***");
        System.out.println(" (1) Opret udlejnings produkt");
        System.out.println(" (2) Find udlejnings produkt");
        System.out.println(" (3) Opdater udlejnings produkt");
        System.out.println(" (4) Slet udlejnings produkt");
        System.out.println(" (5) Tilbage til hovedmenuen");
        System.out.println("\n Dit valg: ");

        int choice = keyboard.nextInt();
        return choice;
    }

    public int writeDeleteMenu()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("\f ***Ønsker du at slette udlejnings produktet? ***");
        System.out.println(" (1) Slet produktet");
        System.out.println(" (2) Anuller sletning af produktet");
        System.out.println("\n Dit valg: ");

        int choice = keyboard.nextInt();
        return choice;
    }

    public String inputType()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Type: ");
        String type = keyboard.nextLine();
        return type;
    }

    public String inputDescription()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Beskrivelse: ");
        String description = keyboard.nextLine();
        return description;
    }

    public double inputDayPrice()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Dags pris: ");
        double dayPrice = keyboard.nextDouble();
        return dayPrice;
    }

    public long inputSerialNumber()
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Serial nummer: ");
        long serialNumber = keyboard.nextLong();
        return serialNumber;
    }

    public void createRentableItem()
    {
        String type = inputType();
        String description = inputDescription();
        double dayPrice = inputDayPrice();
        long serialNumber = inputSerialNumber();
        rentCtr = new RentController();
        rentCtr.createRentableItem(type, description, dayPrice, serialNumber);
    }

    public void readRentableItem()
    {
        System.out.println("Der er følgende udlejnings produkter i databasen");
        System.out.println(" ");
        listRentableItems();
        System.out.println(" ");
        System.out.println("Angiv serial nummer på det produkt de vil se nærmere på.");
        rentableItemInfo();
        System.out.println(" ");
        System.out.println("Tryk 5 for at komme tilbage");
        pause();
    }

    public void rentableItemInfo()
    {
        long serialNumber = inputSerialNumber();
        rentableItemInfo(serialNumber);
    }

    public void rentableItemInfo(long serialNumber)
    {
        System.out.println(" ");
        RentController rentCtr = new RentController();
        if(rentCtr.readRentableItem(serialNumber) != null)
        {
            System.out.println("Informationer for serial nummer:    " + rentCtr.readRentableItem(serialNumber).getSerialNumber());
            System.out.println("Type:                               " + rentCtr.readRentableItem(serialNumber).getType());
            System.out.println("Beskrivelse:                        " + rentCtr.readRentableItem(serialNumber).getDescription());
            System.out.println("Dags pris:                          " + rentCtr.readRentableItem(serialNumber).getDayPrice() + " kr.");
        }
        else
        {
            System.out.println("Serial nummer findes ikke");
        }
    }

    public void listRentableItems()
    {
        RentController rent = new RentController();
        for(RentableItem item : rent.getRentableItems())
        {
            System.out.println(item.getSerialNumber() +"  "+ item.getType());
        }
    }

    public void updateRentableItem()
    {
        System.out.println("Der er følgende udlejnings produkter i databasen");
        System.out.println(" ");

        listRentableItems();

        System.out.println(" ");
        System.out.println("Angiv serial nummer på det produkt de vil se nærmere på.");
        System.out.println(" ");

        long serialNumber = inputSerialNumber();
        rentableItemInfo(serialNumber);

        System.out.println(" ");

        RentController rentCtr = new RentController();
        if(rentCtr.readRentableItem(serialNumber) != null)
        {
            System.out.println("Indtast følgende nye informationer");
            System.out.println(" ");
            String type = inputType();
            String description = inputDescription();
            double dayPrice = inputDayPrice();
            rentCtr.updateRentableItem(serialNumber, type, description, dayPrice);
            System.out.println(" ");
            System.out.println("Produkt opdateret med de nye informationer");
        }
        System.out.println(" ");
        System.out.println("Tryk 5 for at komme tilbage");
        pause();
    }

    public void deleteRentableItem()
    {
        RentController rentCtr = new RentController();

        System.out.println("Der er følgende udlejnings produkter i databasen");
        System.out.println(" ");

        listRentableItems();

        System.out.println(" ");
        System.out.println("Angiv serial nummer på det produkt de vil se nærmere på.");
        System.out.println(" ");

        long serialNumber = inputSerialNumber();
        if (rentCtr.rentExists(serialNumber))
        {
            rentableItemInfo(serialNumber);
        }
        else
        {
            System.out.println("Serienummeret blev ikke fundet");
            deleteRentableItem();
            return;
        }

        System.out.println(" ");
//        System.out.println("Ønsker du at slette udjelnings produktet?");
//        System.out.println("1 = ja, 2 = nej");
//        System.out.println(" ");

        boolean exit = false;
        while(!exit)
        {
            int choice = writeDeleteMenu();
            if(choice == 1)
            {
                rentCtr.deleteRentableItem(serialNumber);
                System.out.println("Produktet er slettet");
                exit = true;
            }
            else
            {
                if(choice == 2)
                {
                    exit = true;
                }
            }
        }
    }
}
